@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u100 REM Program to compute APR (Annual Percentage Rate) from loan amt A, Payment P, and nr of payments N. 110 ? "Truth-in-LeT}nding Interest Rate" 120 ? "Calculator - JHS 28 July 1986" 130 ? :TRAP 600 140 ? "Loan Amount";:INPUT A:? "Monthly Payment";:U}INPUT P:? "Total Nr of Payments";:INPUT N 150 IF A=0 THEN ? "AMOUNT=0 - INTEREST IS UNDEFINED":GOSUB 1000:GOTO 140 155 PA=P/V}A:I=PA 160 FOR J=1 TO 100 170 IOLD=I 180 GOSUB 500 190 IF ABS(I-IOLD)/IOLD<1E-12 THEN 300 200 NEXT J 210 ? "No convergence!":W}GOSUB 1000:GOTO 140 300 ? "CONVERGED AFTER ";J;" ITERATIONS" 400 ? "APR=";I*1200;" PERCENT PER ANNUM" 410 ? :GOTO 140 500 REMX} Iteration to improve estimate of I: 510 I=PA*(1-(1+I)^(-N)) 520 RETURN 600 ? :? "Use BREAK to exit to BASIC.":? :GOTO 110 10Y}00 SOUND 0,65,12,15:FOR I=1 TO 120:NEXT I:SOUND 0,0,0,0:RETURN 0 RETURN 600 ? :? "Use BREAK to exit to BASIC.":? :GOTO 110 10?APRPROG.BAS - Computes Annual Percentage Rate (APR) from amount of loan, number of monthly payments, and amount of monthly pa [}yment (principal plus interest). Uses functional iteration method based on Contraction Mapping Theorem. (C) 1987 by John H. \} Sangster, placed in the Public Domain for non-commercial use; all commercial rights reserved. Theorem. (C) 1987 by John H. _10 REM Simple Checkbook Program 11 REM JHS 06/08/86 Version 1.0 12 REM Command interpreter to be 13 REM added in later versio^}n. 15 DIM A$(40):TRAP 200:BAL=0 200 REM Startup Routines 220 DIM C(100):DIM D(300) 1000 REM F - Forward Balance 1005 TRAP 200_}0 1010 ? "Balance forward from prev stmt":INPUT BALF:BAL=BALF 2000 REM C - Enter Credit Items 2010 ? "Enter credit items (dep`}osits,":? "interest, corrections etc.)," 2020 ? "followed by RETURN, or just RETURN":? "to end input.":NC=0 2030 FOR I=1 TO 1a}00:INPUT A$:IF LEN(A$)=0 THEN GOTO 3000 2035 C(I)=VAL(A$) 2040 BAL=BAL+C(I):NC=I:NEXT I 3000 REM D - Debits: checks & chargesb} 3010 ? "Enter debits(checks&charges)" 3020 ? "Start with checks, beginning with":? "check number";:NCHK=0 3025 TRAP 3030:INPc}UT A$:NCHK=VAL(A$):ND=0 3030 FOR I=1 TO 300:? NCHK;" ";:INPUT A$:IF LEN(A$)=0 THEN GOTO 4000 3040 D(I)=VAL(A$):BAL=BAL-D(I) d}3050 ND=I:IF D(I)>=0 THEN NCHK=NCHK+1 3060 IF D(I)<0 THEN NCHK=NCHK-1 3070 NEXT I 4000 REM Final Output Section 4010 TC=0:TD=e}0 4020 IF NC>0 THEN FOR I=1 TO NC:TC=TC+C(I):NEXT I 4030 IF ND>0 THEN FOR I=1 TO ND:TD=TD+D(I):NEXT I 4090 ? "STARTING BALANCf}E WAS $";BALF 4100 ? "TOTAL CREDITS $";TC;" # ITEMS: ";NC 4101 ? "TOTAL DEBITS $";TD;" # ITEMS: ";ND 4102 ? "ENDING BALg}ANCE IS $";BAL:? :? 4110 ? "DO NEXT MONTH";:INPUT A$:IF A$(1,1)="Y" THEN BALF=BAL:GOTO 2000:END TEMS: ";ND 4102 ? "ENDING BAL`CHEKBOOK.BAS - Simple checkbook balancing aid. Nothing fancy, just does the dirty work. Main advantage over a calculator isi} that the program helps you keep your place by automatically incrementing the check number as you enter check amounts. (C) 1j}987 by John H. Sangster - Placed in the public domain for non-commercial use; all commercial rights reserved. amounts. (C) 1n\]{OPCLINDISPLAYHEXDECTEMPGETNUPRNTNUPAUSTOTAHENUKEMEMTOTAPLACPRNPLACELOl}.=> @@@dm} SAVE "D:GRASSCAL.BAS$$.$$.n}($$.󠠠2$$.<$$.堠F$o}$.P$$. GRASS Calculator Z$$.d##p}n##x##RR;@,;@,;@q},;@,;@,;@,;@,6.  + A'A'A r}@AR@.@.@@K:٠-@@(((s} | Ӡ |((( | Ҡ |-@@--(%頠 ^t} Means to hold--(% 0  the CONTROL key++(#  and press the--(% u} 0  next character."--(%  ---------------,**("^QuitMCMRM-M+  P Print 6(v} @,,($ 0. ABCDEF  # Dec. placesJ( T$$(^Rt % 789/  T +/-^w}( h--(%^Sqr+/-456X ^C Memory Clearr--(% ^M Mem. to Main|))(!x}^Dec Z 123- ^- Memory -))(! ^+ Memory +(^HexCLR0.=+ //(&y}  Z Clear Current**(" CLR Clear All( ԠҠz}( A@6-!6.0%(3#-@@#( 0 A( "@:P,)"@:#,)"@:,(6.{}0"@:,+B:,"A@  6-"6-A:,Π A0|}6. &"@:+,6.+0"@:-,6.-:"@:/,6./D"@:*,)"@:X,6.XN"@:=,6}}.=X"@:,6.S6-$b"@:,6.R6-M:,l*"@:,6.H A* A`v*"@:,6~}.D A0* A`+"@:,)"@:,#6-+6. ("@:,6-%6.=( A ("@:,6}-&6.=( A ,"@:,6-"6.=, A "@:P, A`$"@:T,6-&$6.}="@:#, A$"@:%,6-'A$6.=4 A@ԠҠ 6.=:,} A@ 4= A@ A "@:,+, B:,,4S)4R)4>)4<A B:},"A0* 6-A:,4 4=6->!!àȠӠH 4+6-%R 4-6-&\ }4X6-$f 4/6-'p A0zԠ6-@ 6.6-)@/}!A'6-&A(/AC!@:Z,#F:A,@d5A@dC6-&@28"@:Z,*B:},%-@@.(08 A"@:Z,A 0"@:.,A0*"@: ,6.=:, 6-B:,* A@})4*"@:$,6-@) A`##@:A,*@:F,A0 @:0,)!@:9,A67<,.>:,}6-%@!@6-@$6.$67@,.."6.8 A`B A 0L}Π͠ԠV  6. A` 6.=:,` B:, A@j$tԠҠ~ A`}-@@(-@@( 6-B:,-@ &@($Ԡ٠} 6.=:,-@@( 6-B:,-@ &@($ àϠؠ?D}!-@@5( Too Large! ? A6-@ ( 6-2 6.< 6.F 6-6-P:'@,P6-}&$@Z' @67<,.=:,' Ad 67<,.>:&@%@:A,,n'6-&@' APx } 6.$67@,.7,$ؠϠà A 6.7,6--@B:,6}.7<,-7<,/9#6-$@%A:,- A%%6-$@%@:,&@:A,%@  6.=:,$}Ġ  $.-@B:,!7<,4E$'. A" ,-@B:,6#7<,4.'6-# A}@) 67B:,%@,..00) AJB:,"%@AT1B:,"%@'67%@,.01 A^%}6-@:7%@,,%6-&@Hh+@!67%@,.+ Ar56.7%@<%@,'6-A:,56-%@}|@ @"67%@,.0667%@,.=:,@ A67%@,.=:, 6-A:,$Š}@ 6-F:@ , AA ' A@ҠίƠ6-@}&!-@3@!( "(-@3@"($̠Ӡ6-@&&}"-@@"(0.000#(-@@#( 0. :$DԠϠҠN A@X- 6}.67@,. )67@,.-3b$l ̠Šˠ٠v66-F:@,&A(*@6B}7t$D:GRASSCAL.BAS}$D:GRASSCAL.BASLISTING OF : GRASSCAL.BAS PAGE 1 ( 1)--------------------------------------------}------------------------------------ 10 REM SAVE "D:GRASSCAL.BAS 20 REM .[Inv][^Q][27 ^R][^E][Norm] 30 } REM .[Inv][Sft =] Grand Rapids Atari System [Sft =][Norm] 40 REM .[Inv][Sft =][8 Sp]Supporters[9 Sp][Sft =][Norm] }50 REM .[Inv][Sft =][27 Sp][Sft =][Norm] 60 REM .[Inv][Sft =][8 Sp]Present the[8 Sp][Sft =][Norm] 70 REM .[}Inv][Sft =][27 Sp][Sft =][Norm] 80 REM .[Inv][Sft =][3 Sp][^H][Norm] GRASS Calculator [^H][Inv][3 Sp] [}Sft =][Norm] 90 REM .[Inv][Sft =][27 Sp][Sft =][Norm] 100 REM [Inv][Sft =][8 Sp]Written by:[8 Sp][Sft =][Norm] } 110 REM [Inv][Sft =] Gary Heitz & Tim Feenstra [Sft =][Norm] 120 REM [Inv][^Z][27 ^R][^C][Norm] 130 CLR 1}40 DIM OP$(1),CL$(15),IN$(15),DISPLAY$(15),HEX$(15),DEC$(1),TEMP$(17) 150 CL$ = "[15 Sp]" 160 GRAPHICS 0 } :GOSUB 1900 170 POKE 710,0 :POKE 709,12 180 POKE 752,1 190 CLOSE #1 :OPEN #1,4,0,"K:}" 200 REM [Inv][3 *] DISPLAY [3 *][Norm] 210 POSITION 2,1 220 ? "[4 Sp][^B][Sft =][^V][5 Sp][^H][Inv][3 Sp]}GRASS[4 Sp][^H][Norm] [3 Sp][^B][Sft =][^V]" 230 ? "[4 Sp][^F][Sft =][^G][4 Sp][^H][Inv] CALCULATOR [^H][No}rm][4 Sp] [^F][Sft =][^G]" 240 POSITION 2,5 250 ? "[Inv][^Q][^R][^E][4 Sp]Atari[7 Sp][Norm][^G] ^ Me}ans to hold" 260 ? "[Inv][Sft =]M[Sft =][Norm][14 Sp]0[Inv-sp] [^V] the CONTROL key" 270 ? "[Inv][^A][^R][^D][16 }Sp][Norm] [^V] and press the" 280 ? "[Inv Sft =] [Inv Sft =][14 Sp]0[Inv-sp] [^V] next character." 290 ? "[Inv][^}Z][^R][^X][15 ^R] [Norm] [^V] [15 -]" 300 ? "[Inv-sp]^Quit[Inv-sp]MC[Inv-sp]MR[Inv-sp]M-[Inv-sp]M+[Inv-sp] [^V] } P Print [Inv]OFF[Norm]" 310 ? "[19 Inv-sp] [^V]" 320 ? "[Inv-sp] 0. [Inv-sp][Inv-sp]A[Inv-sp]B[Inv-sp]C[In}v-sp]D[Inv-sp]E [Inv-sp]F[Inv-sp] [^V] # Dec. places" 330 ? "[19 Inv-sp] [^V]" 340 ? "[Inv-sp]^Rt [I}nv-sp][Inv-sp] % [Inv-sp]7[Inv-sp]8[Inv-sp]9[Inv-sp]/ [Inv-sp] [^V] T +/-" 350 ? "[19 Inv-sp] [^V]" 360 } ? "[Inv-sp]^Sqr[Inv-sp][Inv-sp]+/-[Inv-sp]4[Inv-sp]5[Inv-sp]6[Inv-sp]X [Inv-sp] [^V]^C Memory Clear" 370 } ? "[19 Inv-sp] [^V]^M Mem. to Main" 380 ? "[Inv-sp]^Dec[Inv-sp][Inv-sp] Z [Inv-sp]1[Inv-sp]2[Inv-sp]3[Inv-sp]- } [Inv-sp] [^V]^- Memory -" 390 ? "[19 Inv-sp] [^V]^+ Memory +" 400 ? "[Inv-sp]^Hex[Inv-sp][Inv-sp]CLR[In}v-sp]0[Inv-sp].[Inv-sp]=[Inv-sp]+ [Inv-sp] [^V]" 410 ? "[19 Inv-sp] [^V] Z Clear Current"; 420 ? "[^}G][18 Sp][^G][^V]CLR Clear All" 430 ? " [19 ^M]"; 440 REM [Inv][3 *] GET 1st NUMBER [3 *][Norm] 450 TRAP 44}0 :TOTAL = 0 :DISPLAY$ = "0" LISTING OF : GRASSCAL.BAS PAGE 2 ( } 2)-------------------------------------------------------------------------------- :IF PRNT THEN LPRIN}T 460 POSITION 3,8 :? " [Inv Sft =]";CL$;"[Curs Lft]0" 470 GOSUB 890 480 IF KEY=ASC("P") OR KEY=A}SC("#") OR KEY=ASC("[^C]") THEN IN$ = "0" 490 IF KEY=ASC("[^Q]") THEN GRAPHICS 0 : END} 500 IF LEN(IN$)=0 THEN 440 510 IF HEX THEN TOTAL = NUM 520 IF HEX=0 THEN TO}TAL = VAL(IN$) 530 REM [Inv][3 *] OPERATION [3 *][Norm] 540 TRAP 730 :OP$ = " " 550 IF KEY=ASC("+"}) THEN OP$ = "+" 560 IF KEY=ASC("-") THEN OP$ = "-" 570 IF KEY=ASC("/") THEN OP$ = }"/" 580 IF KEY=ASC("*") OR KEY=ASC("X") THEN OP$ = "X" 590 IF KEY=ASC("=") THEN OP$ = "=" 6}00 IF KEY=ASC("[^S]") THEN OP$ = "S" : TOTAL = TOTAL*TOTAL 610 IF KEY=ASC("[^R]") }THEN OP$ = "R" : TOTAL = SQR(TOTAL) 620 IF KEY=ASC("[^H]") THEN OP$ = "H" : GOSUB 1}290 : GOTO 760 630 IF KEY=ASC("[^D]") THEN OP$ = "D" : GOSUB 1430 : GO}TO 760 640 IF KEY=ASC("[Tab]") OR KEY=ASC("[Sft-Tab]") THEN KEY = 0 : OP$ = " " 650 IF KEY}=ASC("[Curs Lft]") THEN MEMTOTAL = MEMTOTAL+TOTAL : OP$ = "=" : GOSUB 1220 660 IF K}EY=ASC("[Curs Up]") THEN MEMTOTAL = MEMTOTAL-TOTAL : OP$ = "=" : GOSUB 1220 670 IF }KEY=ASC("[^C]") THEN MEMTOTAL = 0 : OP$ = "=" : GOSUB 1220 680 IF KEY=ASC("P") LIS}TING OF : GRASSCAL.BAS PAGE 3 ( 3)-----------------------------------------------}--------------------------------- THEN GOSUB 1760 690 IF KEY=ASC("T") THEN TOTAL = 0-TOTAL } : OP$ = "=" 700 IF KEY=ASC("#") THEN GOSUB 1810 710 IF KEY=ASC("%") THEN TOTAL = TOTAL}/100 : OP$ = "=" 720 IF OP$=" " THEN 440 730 REM [Inv][3 *] GET 2nd NUMBER [3 *][Norm] 7}40 DISPLAY$ = STR$(TOTAL) 750 IF PLACES THEN GOSUB 1540 760 IF OP$="=" THEN GOSUB 1140 }770 GOSUB 890 780 IF KEY=ASC("[^Q]") THEN GRAPHICS 0 : END 790 IF LEN(IN$) }THEN IF OP$="S" OR OP$="R" OR OP$=">" OR OP$="<" THEN 510 800 IF LEN(IN$)=0 THEN 530 810 } NUM = VAL(IN$) 820 IF OP$="=" THEN TOTAL = NUM 830 REM [Inv][3 *] BASIC MATH ROUTINES [3 *][Norm] 84}0 IF OP$="+" THEN TOTAL = TOTAL+NUM 850 IF OP$="-" THEN TOTAL = TOTAL-NUM 860 IF OP$="X"} THEN TOTAL = TOTAL*NUM 870 IF OP$="/" THEN TOTAL = TOTAL/NUM 880 GOTO 530 890 REM [Inv]}[3 *] INPUT [3 *][Norm] 900 PLACE = 1 910 IN$ = "" 920 HEX = 0 930 GET #1,KEY 940 IF KEY>127 } THEN KEY = KEY-128 : POKE 694,0 950 IF KEY>ASC("Z") THEN IF PEEK(702)<>64 } THEN POKE 702,64 : KEY = KEY-32 960 IF KEY=ASC("Z") AND LEN(IN$) THEN POSITION 5,8 } : ? CL$;"[Curs Lft]0" : GOTO 890 970 IF KEY=ASC("Z") THEN 930 980 IF KEY=ASC(".") } THEN 1030 LISTING OF : GRASSCAL.BAS PAGE 4 ( 4)-------------------------}------------------------------------------------------- 990 IF KEY=ASC("[^M]") THEN IN$ = STR$(MEMTOTAL) } : PLACE = LEN(IN$) : GOTO 1040 1000 IF IN$="" AND KEY=ASC("$") THEN HEX = 1 :} GOTO 1060 1010 IF HEX THEN IF KEY>=ASC("A") AND KEY<=ASC("F") THEN 1030 1020 IF KEYASC("9") THEN 1100 1030 IN$(PLACE,PLACE) = CHR$(KEY) 1040 PLACE = PLACE+1 1050 IF PLA}CE>15 THEN PLACE = 15 1060 IF HEX THEN DISPLAY$ = "$" : DISPLAY$(2) = IN$ 1070 IF }HEX=0 THEN DISPLAY$ = IN$ 1080 GOSUB 1160 1090 GOTO 930 1100 REM [Inv][3 *] RETURN FROM INPUT [3 *][}Norm] 1110 IF HEX THEN DISPLAY$ = IN$ : GOSUB 1460 : IN$ = STR$(NUM) 1120 IF LE}N(IN$) THEN GOSUB 1140 1130 RETURN 1140 REM [Inv][3 *] PRINT NUMBER [3 *][Norm] 1150 IF PRNT } THEN GOSUB 1860 1160 POSITION 3,8 :? OP$ 1170 POSITION 5,8 :? CL$ 1180 X = LEN(DISPLAY$)} 1190 POSITION 20-X,8 1200 ? DISPLAY$ 1210 RETURN 1220 REM [Inv][3 *] PRINT MEMORY [3 *][Norm] 1230 } TEMP$ = STR$(MEMTOTAL) 1240 POSITION 5,6 :? CL$ 1250 X = LEN(TEMP$) 1260 POSITION 20-X,6 1270 ?} TEMP$ 1280 RETURN 1290 REM [Inv][3 *] DEC TO HEX [3 *][Norm] 1300 IF TOTAL>=1000000000 THEN POSITI}ON 5,8 : ? " Too Large! " : GOTO 1700 1310 I = 9 1320 NUM = TOTAL 1330 HEX$ = CL$} 1340 HEX$ = "" LISTING OF : GRASSCAL.BAS PAGE 5 ( 5)----------------------}---------------------------------------------------------- 1350 X = NUM :NUM = INT(NUM/16) 1360 X = X-NU}M*16 1370 IF X<10 THEN HEX$(I,I) = STR$(X) : GOTO 1390 1380 HEX$(I,I) = CHR$(X-10+ASC("A"))} 1390 IF NUM<>0 THEN I = I-1 : GOTO 1350 1400 DISPLAY$ = "$" 1410 DISPLAY$(2) = HEX$(I)} 1420 RETURN 1430 REM [Inv][3 *] HEX TO DEC [3 *][Norm] 1440 GOSUB 1290 1450 DISPLAY$ = HEX$(I) 1460 } NUM = 0 1470 FOR I = 1 TO LEN(DISPLAY$) 1480 HEX$ = DISPLAY$(I,I) 1490 IF DISPLAY$(I,I)<="9" }THEN NUM = NUM*16+VAL(HEX$) : GOTO 1510 1500 NUM = NUM*16+ASC(HEX$)-ASC("A")+10 1510 NEXT I 1520 } DISPLAY$ = STR$(NUM) 1530 RETURN 1540 REM [Inv][3 *] ADD .00 [3 *][Norm] 1550 IF HEX THEN RETUR}N 1560 FOR I = 1 TO LEN(DISPLAY$) : IF DISPLAY$(I,I)="E" THEN POP : GOTO 1690 15}70 NEXT I 1580 FOR I = 1 TO LEN(DISPLAY$) 1590 IF DISPLAY$(I,I)="." THEN POP : LO}C = I : GOTO 1610 1600 NEXT I :DISPLAY$(LEN(DISPLAY$)+1) = ".00" :GOTO 1690 1610 I}F LEN(DISPLAY$)=LOC+2 THEN 1690 1620 IF LEN(DISPLAY$)=LOC+1 THEN DISPLAY$(LOC+2) = "0" : } GOTO 1690 1630 X = ASC(DISPLAY$(LOC+3)) :X = X-48 1640 IF X<=4 THEN DISPLAY$(LOC+3) = "" } : GOTO 1680 1650 TEMP$ = DISPLAY$(LOC+1,LOC+2) :X = VAL(TEMP$) :X = X+1 1660 IF X<10 } THEN DISPLAY$(LOC+1) = "0" : DISPLAY$(LOC+2) = STR$(X) : GOTO 1680 LISTING OF : GRASSCAL.BA}S PAGE 6 ( 6)---------------------------------------------------------------------}----------- 1670 DISPLAY$(LOC+1) = STR$(X) 1680 TOTAL = VAL(DISPLAY$) 1690 RETURN 1700 REM [Inv][3 *] }PAUSE [3 *][Norm] 1710 POKE 20,0 1720 X = PEEK(20) 1730 IF X<100 THEN 1720 1740 POP 1750 }GOTO 440 1760 REM [Inv][3 *] PRINTER ON/OFF [3 *][Norm] 1770 PRNT = 1-PRNT 1780 IF PRNT THEN POSITIO}N 33,10 : ? "[Inv]ON[Norm] " 1790 IF NOT PRNT THEN POSITION 33,10 : ? "[Inv]OFF[Norm}]" 1800 RETURN 1810 REM [Inv][3 *] DECIMAL PLACES [3 *][Norm] 1820 PLACES = 1-PLACES 1830 IF PLACES } THEN POSITION 3,12 : ? "0.00" 1840 IF NOT PLACES THEN POSITION 3,12 : ? " 0. "} 1850 RETURN 1860 REM [Inv][3 *] PRINT TO PRINTER [3 *][Norm] 1870 IF PLACES THEN GOSUB 1540 1880 } TEMP$ = OP$ :TEMP$(2) = " " :TEMP$(3) = DISPLAY$ :LPRINT TEMP$ 1890 RETURN 1900 REM} [Inv][3 *] KILL THE BREAK KEY [3 *][Norm] 1910 X = PEEK(16)-128 :IF X THEN POKE 16,X : }POKE 53774,X 1920 RETURN } RETURN  NOTICE: This article originally appeared in the May, 1989 issue of Atari Interface Magazine and may be freely distributed }or reprinted in non-profit User Group publications as long as the article's author and Atari Interface Magazine are credite }d AND this notice is reprinted with the article. All other publications must obtain written permission from Unicorn Publica }tions, 3487 Braeburn Circle, Ann Arbor, MI 48108, Phone: (313) 973-8825 before using this article. The GRASS Calculator } by Gary Heitz (GRASS) The GRASS Calculator was created as part of the Grand Rapids Atari System Supporters' BASIC progra }mming class. We started by explaining cursor controls and simple PRINT and POSITION statements. A simple calculator was }used to demonstrate these commands and to explain the math operations. As time went by, the simple calculator became more i }nvolved and grew as new features were added. One unusual feature that was included affected how the calculator's memory }worked. On a normal calculator, you store something in memory but unless you have a pretty good memory yourself, you can ea }sily forget what you stored there. The GRASS Calculator has two number displays. One is like that on any calculator -- th!}e main display. The second one always shows what has been stored in the memory. The other features of the GRASS Calculat!}or are: Print - will print to a printer just like a more expensive printing calculator will do. Change decimal places !}- will either display your number normally with no alterations to any decimal places, or it will round the number's decimal !}places to the nearest hundredths. Change signs - This feature is like the +/- key on most calculators. It will change t!}he current number from positive to negative or vice versa. Four memory keys - Memory + (add to memory), Memory - (subtract!} from memory), Memory (display the contents of memory in the main display), and Memory Clear (clears the memory). Clear !}and All Clear - Clear erases the number you are currently entering (good for when your finger goes a little crazy on you and!} hits the wrong key). All Clear will clear everything in the main display. It does not clear the memory, though. Root !}and Square Root Decimal to Hexadecimal Conversions Hexadecimal to Decimal Conversions Percent - This will convert a ! }number into its percent. Quit - I added this feature because it allows for a clean exit from the calculator without havin! }g to hit the RESET button. Because the GRASS Calculator is not just for adults with perfect coordination, which does not ! }include myself, I have added some "safety" features. The BREAK key will not work. The two other keys that will get you now! }here are the Atari, or inverse, key and the Caps key. If you hit one of these keys by accident, there is no need to worry;! } they will be ignored. Here's an idea for any BASIC programmers out there or anyone interested. If you renumber this pro!}gram to begin with a high line number, like 30000, you can do your programming and GOTO the first line of the calculator to !}use it and QUIT when you are done with your calculations. This way you don't have to keep loading and reloading the progra!}m you are working on. One last thing to mention. The two inverse letters that precede each line in the type-in program a!}re checksums. They work the same as any BASIC program that you find in Antic or ANALOG. You can use either of their type-i!}n programs to type in the GRASS Calculator. I hope you enjoy using it. ic or ANALOG. You can use either of their type-i L100 PRINT "}" 110 PRINT "MORTGAGE CALCULATOR by JHS" 120 ? "Revised 10 August 1986":? 130 N=300:NOLD=300:REM 25 YEARS 140 PRI%}NT "ANNUAL PERCENT INTEREST"; 149 TRAP 162 150 INPUT I:IF I>0 THEN GOTO 170 160 IF I>0 THEN GOTO 170 161 PRINT "I <=0, SO..."%} 162 END 170 IF I>=1 THEN GOTO 200 180 I=I*100:? "TIMES 100 ASSUMED" 181 GOSUB 320 200 PRINT "PAYMENT PERIODS/YEAR"; 205 TRAP%} 211 210 INPUT K:GOTO 220 211 ? "MONTHLY PAYMENTS ASSUMED":K=12:GOSUB 320 220 IF K<=0 THEN STOP 230 LET IP=I/(K*100):REM INT/%}PERIOD 240 PRINT "TOTAL NR OF PAYMENTS"; 245 NOLD=N:TRAP 255 250 INPUT N:IF N<=0 THEN STOP 251 GOTO 260 255 N=NOLD:? "ASSUMIN%}G N=";:? N:GOSUB 320 260 GOSUB 265:GOTO 270 265 LET R=IP/(1-(1+IP)^-N):RETURN 270 PRINT "MULTIPLIER=";R 279 TRAP 140 280 PRIN%}T "AMOUNT BORROWED";:INPUT A 290 IF A<=0 THEN PRINT :GOTO 140 300 P=INT(A*R*100+0.5)/100:PRINT P 310 GO TO 279 320 SOUND 0,85%},10,15:FOR J=1 TO 40:NEXT J:SOUND 0,0,0,0:RETURN 400 REM Print Table of $/1000 410 ? "Starting APR";:INPUT APR1 420 ? " Endin%}g APR";:INPUT APR2 430 ? " Step in APR";:INPUT ASTEP 432 CLOSE #1:OPEN #1,8,0,"P:" 433 PRINT #1,," Dollars Per Thousand Per%} Month":PRINT #1," " 434 PRINT #1," ","APR"," 15 Years"," 25 Years"," 30 Years":PRINT #1 440 FOR APR=APR1 TO APR2 STEP AST%}EP 450 IP=APR/(K*100):N=180:GOSUB 265:R15=R*1000:N=300:GOSUB 265:R25=R*1000 455 N=360:GOSUB 265:R30=R*1000:PRINT #1,,APR,R15,%}R25,R30 460 NEXT APR :N=180:GOSUB 265:R15=R*1000:N=300:GOSUB 265:R25=R*1000 455 N=360:GOSUB 265:R30=R*1000:PRINT #1,,APR,R15,$ Probably everybody who ever got a home computer must have written one of each of the following programs, but I thought a few) } readers of these postings might find them useful nevertheless, especially "APRPROG.BAS", which computes the effective Annual)!} Percentage Rate of a loan. -John Sangster / jhs@mitre-bedford.arpa --------------------------------------------------------)"}---------------------- MORTGAGE.BAS - Simple loan payment calculator. Given the Annual Percentage Rate of interest, the numb)#}er of payments per year (normally 12), and the total number of PAYMENTS in which loan is to be paid off, returns the monthly )$}payment amount. (E.g. for 30 years of monthly payments, there are 360 payments.) The above is obtained by "RUN" or GOTO 100.)%} If you start the program instead with "GOTO 400", it prints, on your printer, a table of "dollars per thousand" loan amount)&}s for a range of interest rates you select and for a set of convenient loan durations (15, 20, 25, 30 years). (C) 1987 by Jo)'}hn H. Sangster, placed in the public domain for non-commercial use; all commercial rights reserved. 0 years). (C) 1987 by Jo(dThis is Speedcalc and the docs ARCedtogether. The docs are namedSpdcalc.doc but this is an ARCed filealso. (C) 1987 by Jo,n AYɼ?^ Y! !Dl?# Y! # #BiAi)AA1>A6B6B l# ! ! ! D # & !1*}H !h ݭ  {[aL$ʊ HpH H H`}   `  S#C*()%)u,-12T6Z)A)q))#4`41+}3F!4!564:-k% @ # & #?H Y!Lq HH };hh` m:m4>4>` m:m3>3>`̄ˎ2>TU !1,} :`2A(A`X(`Ap ? Y!8 N7L'L' "h^ivih h !Ah)hA"ݚ"1-}7 } "AAAwh^ʽhiAAhL!ʊ "H"H`h^A`6> L!6>h^L!61.}>L!L4"وh^јih^hL!~3"x"h"h"K"X"}"H)h)` i@L"8 `H)h)` @@L"i `H1/}H3>EO%N ԍЍ4>EO%NЮ2>7> hh@@ԩ"01‘`@ԭ3>4>`? Y! !)_Y10} l#L! # ~!,> # &>`A˭A̠̦AAA`` #L2$XiȅYiAii11}آ $iiإi(i $`iȥ)JJJJiȥ)i`XiYiȑȑȮAAAJiʩ12} > Ƚ> ȦAJʩAmAA轴AmA%ʎA(`(` !?& A%%13} % >A>A N7 7 3Lq >> >L<2AAmAA%A` m:@ Y! !)_LCRL& 14}>)A AAL% m:@ Y! (} % 8=ok>) A AA2>AA>AA) >15}iiş8 N7L&8 N7 A AL!AAAAAiAAAAAAi8AG>_>8 N716}L&AlhA8A00A) &J AAAAA8AL&AAAAA AAA A 'L& 'A17}ALa& AAAAL#&AAmAA膆3'AmA(L#&AmA A`(8AAG>_>18}AA懤AAhx8 N7/A AAȱhA^hA>g`g^h` A19}JJJJAⱂ A莀AA ȮAA ? L`(ȱ*Ȫʽ 1:}ʝA `~A` m:L( @ Y! ( % 8=51%-A2> ~!L(1;}A %AAA 2$L!A :~ : !ɛ3~$) A0:U&ڙ : :L( :A1<}`d懭AiŇA #`ƇAćγA #`2#憬AĆAA}A%䆐 2$`ƆAĆβA 2$`@ Y! 1=}(>> >N8A0ICA >98@042.mA3&A > < 8=e S RAL"*L!A %AA AAL<*1>}A #L!AņAŇAA #`AA` > B >B >B >(L9* B*L9B*B*膗 HHL1?}8h >ʊ *H*H` AEILSSRSABXNOGQNUVSPTGNRDMEw==?==~==U=,b, +BB >:? > +BB >), >BBL9B1@}BL9ȥAA`L9 N7X)NȱAȱA>H>H %h>h>B`BB`8`A1A}A N7L9 >ABA >A[8@mA3ǍA > < 8=еeA`4B5B * O+>HHHHHH4B51B}B O+hAhhhhhh =AH(­AA N7` , =5B4B < =` B ?#} :BB[A Y! (L-3B ~:A1C}O Y!BB : : : :BABA :AAʩ 8 N7[A#A8A0A)  'JLH-1D} 'AAϮA* "AA1 :BL,B懩 :B0L, : : 1E}:AA3BE˩A n! ! # # & !L#AA m:AABL.L!AA m:AAB L.ABAB X.1F}ABBB @ˢ Y! m0BBL!A* Y!La.A Y! & !.ݞ.La.ʊ .H`H.H.H`hhBB` !Lq 1G}C*Z)A))q)..B3[BeTBB8 N7EA AAȢAA 9/A '/BB N7 7`B1H}B N7 5 N7ȑL/A`A`B8B BB8B B "hAhh>>˩ > b0 >LC0@L1I}.0CB >Ac[_8@e3Um BAB8i@ b0 b0 >3 < 8=)%e!m B < <B b0 >L/1J}h "L\0 b0 > b0 > b0 >L/Aˢ "򩀍`x`B8AmA BB8BmA BBAL011K}AAJABBBABAB .BBBBBBBBABABL1BB BBBBAB .BABB1L}BBBBBB BBL1AAJABBBAB BB .BBBBBBBBABABL1BB BB1M}BB BB .BABBBBBBBB BBL3 :,BhhL2`@+ Y! (BL! ?#A ~: : :0~1N} : 1 1 1 12A 1AA 1 1 1ȱ 1iişѩ 1 1慥ʼn1O}BH : : #hB H; & #` ;,BhhLK3`@C Y! (BL! ?#A ~: : :0f : 2~ 2w # 2 21P}2 2A 2 2 2 2L3 2慥ʼnBH : :,B l# #hB H; &L# : : #A Y1Q}! # &`Bɀ`>`Aw Y!AAAA5)&8 N7AAȱAA 7i1R}懥eв憥3ЦAA8 N7L! 5 N7ȑ 3`@ Y! m:>I>>N :`F : :`6> !6>N' 1S}L4A%3 % >A N7 >AL4)A 7 3`Aʽ%v轀A轀8轀8i bOA 1T}I%A8A%A`Ɨ%hhȽh1U}A` !UTA8刨A 5B` <  Y! !)_Yl L!A1W}A N7AAAAAAL9HAAAAAAAAhA0 >@0e3 > < 8=Ќe8 1X}N7ALm6 󱂝A>H>H %h>h>AA N7AAAAAA`ʆdjfe1Y}ʊei&mA(`()A)AȱA8` 5A2AAȥA AȭAȢA1Z}L=8 8AA8AmAAAAȽAȥA AȭAȢ~AmAɺmAi`1[}ȑ@ Y!AALq A "()AL9H>> >R-N+J.FP%(A B@L9 6L1\}9HL8 m*L9 >IL99 < >L9@e < >w+7-2*-/(^#)L9hH 9L59>>L9L*hHw>w>1]} 9hHw>w>HHHHHHHL8jL=hH 9L9h <B "A "L4hhhhhhhhh1^}契 HH>H~>H`AA@L9} : ?#h: ~: : : :0 : ;,B0 :L7: : :˩A n!1_} ! # & ! #`D:*.*Э` `B`BBB`B x:DEBHIBJBKB VB`B`B`BB1`}BB` x: BL:x;y;z;B x:HI Bx; :y;z;x;`y;z;B x:HIB :y;z; `{; :{;L:B0 @1a}[ Y!`ɀ @w Y!`@k Y! 5`: +`|; ;|;)?<|;)@`I@`|;;,P a1b}{)ɀ`HdҢҠh`lj;k+*opui-=vcbxz436521, .nm/reytwq907~8<>fhdgsaLJ:K\^OPUI_|VCBXZ$#1c}&%"![ ]NM?REYTWQ()'@}FHDGSA {   ` } `ԅ ` ؠ01d}B)BșBB`>> = $=>e>>i>`B `B "`B "` ٤ԥ`)81e}>`ԍ>)ԢҠ= = @=> `)`H = = > =``Hԕh`>>:  808`:`(2Vr.D1g}28v @h0X Hp8`99=====.4&,!!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0!1!2!3!4!51q}B%DOS SYSB*)DUP SYSBSAPRPROG BASBZAPRPROG DOCB ]CHEKBOOKBASBhCHEKBOOKDOCB.kGRASSCALBASB]GRASSCALLSTBGRASSCALTXTB MORTGAGEBASB MORTGAGEDOCB(README 1STBF)SPDCALC COMB{xSPDCALC DOC!6!7!8!9!:"!"""#"$"%"&"'"(")"*"+","-"."/"0"1"2"3"4"5"6"7"8EXIT to DOS: Are you sure? (Y/N):SpeedCalc}SpeedCalc By K. Martin1r} & C. BrannonSYSTEM Trapped.}You must have 48K to run SpeedCalc.Remove any cartridges, or on XL/XEhold down 1s} as you re-boot.Press to re-boot:CLEAR SHEET: Are you sure? (Y/N): error Width:Goto:Recalculation is OSave (Dev1t}ice:Filename)>Load (Device:Filename)>OK. No errors.I/O Error # Break key abort!Format: eft, enter, or ight Justify?1u}Number of decimal places?Processing data transferNot enough room to enter dataMove cursor to top left of new positionMove1v} cursor to bottom right of blockPrinting...Print to (Device:Filename)>Recalculating...Not a SpeedCalc file.Press 1w} + : X.BBBͭBBAO : Y!`@J>L3L!,,  :11L@Not a SpeedCalc file.Press 0YSPDCALC.D02>!`(& Cqr#O4 Be&*hʀ SL:l@捜6aؤa#H%pSM9iL C' 4sH3 ghO9o!t@#5y}4 ـ&̘2s\H/APCf WD\)CfY?p \_ٰyKT,Е3:i[r뛦tR)Gc$Mb YĐs=5z};NCBlle9e,=MKs13MF֚dXC;h$͍CHaH hVo`=oASoL5%xb]QYy$ms|XqǑ2]_l4%Ss5{}GNQXt XB 1Lao QT![ EG AJT1IbAaNLGJB%Ua HM6E% Wn@ ecAzgHDDWe]} } r 5|}&tTa)`n`ٝJVyJ]bEe$fi-8h oQFwFjjTx$!0C Yn Bq0e|f}e!͸"B pT5}} BjgZ6eB+-c9lwo&/U%*V~\wSNH)EQ_̉)e(F_ wh[ L;q*]lTƬjeWGu_w:^HZШqxWTy5~}Evʉ`z}^HlMCWAerxID>_ߖ-qaw/cBogh`9tu;ᆇ^pE;L,hDZ5}W/W$AHp$We>;WZ[ -`cئ?%Gw%W&zKӦq|ǩ'M ۰&ɡ*Sf4g[2R xG#ډD2舥==sa^󕷤fjJJHA5}.un8ANIN1FP'9PKF6"5}H tj/L".@UfI/A!8<i=`}jBR(̂s• ju3Se3!rŵ@{l:sί% O6pk P2 97̨c+m5}٨"=m8@d  )+-[6ЅNteI*7qtZBD rmZ<o5zXu Fa 9ǼTW A 85} jSpl+NJX }oYt=0ympyK0[ࠪ=hZY o;p'O#/ؗK6!D4­gG}lxY#mJ5}1'tl3\٦+5*`BvkE8O2S վ2OJ.jƈqzBO['vCeߑ!@6Qt)GiԜ.1^l,5}`Z\" fNj_6}rr ٜoa}MX`ghCt ^/%55}hg!jdw{"-gc~-&pLyHK-&W+'1A (~mɴaRt^88 n?&=& e/3K&N MAn€t~N/QzɃW>db)B25}|qh#T>'gDVF|CVHRma''.[!wOavsڄv9stk|ƇhIyaQuZ(=H@GV}Ĉu&crFK5}Pt_E%'9H?ؔh0Q@s~q+* Avm&Wyc0hrDtd8Kkt.d9fZGg6InjG.Qs*f*qr`qJ vi5}P&((ՑQ 'dq~ גsYw0kvTGRtlbTdXMYp9C@!b!0Y@,01 5nWe&(+Qs}Q25}r"/1Y)⏘baVHɝfA6q`q4|f'bTu M$VZыqZC>[#2Q&b{Z1p*BsXxa2)%S&4&ҳ 8T95}gu%}9v";6NKrKf OPQTW}Ƞrf-Vi}@K|hvmʔew Ug'Y,jT1600Q2rd5}Vӳ6_BI43teRlc DL**,[J?ޡ9R!\t?UM(#QVHL=_AV8yZ0S]\eHqd.arf+[I|5}&gw"aNzhƀx't1c(Mw䓋16g@ >EGZZd`Sd$ 1^SR)5ƘVQ"fKC ,H=²~ȕsLiQ?㳦cTY5}=Kty&t.:x;DmV&3F=*2,+]eKS0}Q#91A`E#I5%!4bizY/?!1IAP0lvx$;1LOA:04bX@R;f5}a&j:6<J,ph(sSs? &n9>t,KI} f$RS~h||8vSr Wr'MDed5}/RR#t+~6X#3("9 @OмؑZ]1o[2G:."[ܼ_T0)o NBVHS?0]+!Lph8[*O PwbaF{F5}ubCdK/ )·Y|"LGecjW5|tbOCRCVKi4[&&dS=Qڵ$DRG``,ae @Hϵ?a*e(;BmYEƗG5}+fk+"0-ؑB.'yW(kd<@̙QuGO!؋6/S=i;Khw6d@::~ߋPh1J=.qUe5}F.(RqO}qHhֶ}*}hwBa':j|fLJi k؆|$( 4AAhfR L 4yKniY=k`<)ntrJ))0,5}) @8ȟ$̙a_ \ 'WXdlQ1q\Y+}:@B2h",TC? z1-Eq-`5?S0+׳+?}1Qt_- 5}mL \}@\zDL=}К yԽ.E$4DRG #;K|,CDsއ>U&"Y? '+Cں `GUss}?^H(T)oWCGB <7wK 3^o-J6C75}CQ9#l(>gvQfk'N-lYr1 DF3$r֫='\t{J[P8f,] SPDCALC.DOC$!`~J S)CfH6c@"5} 8rސ37f@ yJ*EBRG 4cI bӦ)%猑ʖ #Hmœ '2 Ƽc /ʔ ݐi(j;aҰ cBP]H+nU!O0hBxhيTk5}BM+ՠx=Ze|X&km~kq]1[$a6rPmrХC9$mPVEô2EGJfTJ,1)+'FO5 ujS'5}lᆑǡ1搙.'&8hv'g5Owy}~U_ᑆja]jb뿿;i+q tO`ݍ-ѡ"mB%AER$EAA05}1{CHѽ6I2fpذ u +##Jq*TZ2c1de3X8!X9T0D-Y>>"b޴>6]pVF[ 5}= CXuIiwљ0E H wȆsk!pP (?cyL#( X}T5*JMNJ}3`R 7!v|u1E["LH#fba ,eBc5}hdY$f UYcå6CA GEB;{6ѱ1P bD JSXYbɣSzAtߏKk(r2ѥY UTؐ7 Hڛ5}NQULJ.!O\ǹetȢFE*O&U,Dyr,ƢB&~8ia:2!8DT0> Y 3ƨQ+J 5} J`1 O>E  t'-* h2T$Dgn萯e,?mj":!)鋳v?j\ )H@@SSZ &累&6$tm5}r*P+XXႶ̓'橄%*vxG^":MP_'A6P`Rҋ@qt\NAGYvQAB2!my0)@oS±&< IpE=5}r OMVK )*,.;Kju\X?+a:0䫳1„,RiW< okA-"9<ALXR(1ɰ:l pyURAlC]Y`6M5}h}`jB'AY,hS*Ȋ-ϞIF3.h*..Rz!3AZ $"c%eFw8ir,B';8/+JFL\5WwV5}!B0Un6PC@)0ģC3xɭ2=Ҧm AtJ+MӹF"f;H@5l&L|'wdžA_TV8džq45}\~7"&?iq7mzL^jsot+JSیWLlr 3 n(8RO(ۇiI]Ȟ+xQM+n{Ƃ+&p 9}I/4R+V?5} \}뺨--4;#[YD: !} Y,Irx٧ri 79&c3ʴ  zT)z> <5}{ tX Dd:&22"RqcCO01NowKSdJFOQx$h_> $HAF=%OP1KNQ4qdPoV,#@"hnZHJOY$&y  PK(5}0!$[Y11yt0S_/e5u"2T6rE#SV[JF(QS>E`=%f_ 7By>2&2('2xWE^(2^-5}7ȋmEafو*aH[!FJv$~7MRJbA@dlِ<:c Aq2p^g'Le2A*!0Q&P!UPKKZ"1Gy@Y0 35}8/eQu@2:y",lT/9CC+fK/17O&[wbe`Az4&iyڇj0CV'Qw6.5}hgJ2Nqqx$TKOTOPK+Su)n.t˙KC[%p@]26}%lRi->cRy9S~KbUuIu8L^#W'QS5:o8:e45}52J}4. \(4S-h_1@TJqmt pe@@G*[8X w*w LH`>%B#{TC L2ͨHZ4FO(ItG?scPI&FL9W4E~5}}w7#j*2o7u8L O#7J9hiVycf^HSX"T7:b0#fC*x"1*>;g|Ti.f54j#V\/ k(nO}(05}uU0Yb'Iu"S,p*4k9 Qޒ}Eer74F!dZz2GU%xuTaF$I$'tz)t,8s+LOk835}(&`4 *S&XcEQ!3.+2-`5P3i0hV *, Va94]>r*mxfp" $RƆ{z wI[l605}i/.pE9pdej˶8R3u7 2#47\QbGv5^[+tih 4*PR  ?1F_47bX7'`jqSHU%X@%aKq; ;5}56pETJWd2$k|$ 4RK&q)2 x!٤l}@Rհ:uupa$rٺyhD(dd7-Oc4ֹVBB|3MQ5}dXka,RZ5eWn`~d!P8*xbnhKP2 A+6 ,4ٛ)lk4YvN; 0sByBûj܁<cH&}gKܾ5}x,4@6P x ٵre8F[5Ga*' OnIS6e], {VOS:c)fph$Rcaa%fc|"3:@k!$L%td"KZk5}be0PEL&sȉ\6 h1pUgQzǜLFeb1=OZ|3B.G(I6VmmرV%g07V T {PcY2֗[k8 q%նh3QQu+JrlE:`vs,Չti[q~iF ymQ'pk`a~>[5}rTϤ:,RXfi,(ACRE,q<݂4:6K0PCP"׆w.6VID#li T4cD4zO*͕[1AeoAQCYT|-5}?mT~"$W˦D|=گN@͞%@2<`A7c҆>f;=–b'sG+u-n[a>sz-濕L5}F9D \TN[aF)3m0*5*2P%+SR4=_^Q hO0kߟmqoo"q?O"rB24'lPkªͿM5}f&l`k/eAt A#Kh[370E׀T˟8aQthYk@"P+QybSrHFX%dAC?4"`NZ0kTv??k5}GRs ޅD sÝ1s*S+\37#~d$cr N(W_@Ac>#>U31!2 "[E^6>$yO1^څ6eԔ5}|Tdû.OY b$yR Ks\R5`"[E:oTO^$mR))^킆ro [jNW1Vt:e&I͢/+$5}BHHnkVXݪ߀JWP,NsmG2fT~Ocfe= >Vk= Ƥ\hGUTOk&c&ޒBS5obt5}V p r; pUY4  *%-  xκJ  Кҥ:6%ԒCNF "aZjH[5}-hĞ_Ccߏ( &$_Mׂ"aL&O+NpAIOo;g+#EPh5(nEdhl>\FB\.^&564˚N߱5}qܟOco&uK,z ~.-( ;&g+xz)l'aw2Qb_jQ)]-,,G/-h=%ȍD@يsg%qg_jBL34B "aLVr!5}Q|ΊwxK,縹k=P*83- ) tU/PQĸj&O+NpAI S ֒Cܘ]NR0,1F6LU&Ou`5}JT,T@TS$N›X( J;&q,R5C(KOz)F(W+r @Op(K~K9hD(ZŇAT5}"SpN`n @0Q (s`A @0U( &q,R5 ˯1P9 *=AJ^x #=_ @GiLg.t)5}dRc\NSiJU׷-k| @0Q (@`QrwdAC?4V=SR*YNeAS[)dtt F( wg5}|U+[4 qdw!4rf|-ѭ% 6f߇$1,k!INױsF(B.0k!s5@U\ƛ!c337@@KD`1&Z,4Xff.5}iB-It X(0[nt S{廫&q,#pA[t SPMU6^MUaDz5nJΚQ *7? mElmH[Cu`5}l?w \[O?"}}7whɍ]K&56ä4`gcQ6˔Kq;f"q?ʒ ԋN9q!C}<oo"q/"YeOa2*SreJfh?+G5}ĴcDzcTX(r:DU6;!y[ݡrMKV63SPM*A@K9[nդZաrٗBKN!asƃݟQ]&"2!5}KNAW ޓ)`V"S@=`2o $t2e33Ff2nK^M]]$6Cq+'p GzzV,,EAOCNDCq5k!YybSr5}H/[60 ŴΦP6Ka~0iקɆqNx#(R `NikN$d^lM]qSpF@(qQFyP_5A%f-_#A 5}t-gBu.,!fiKS\k_[_keyw̓Ƀ#͇\U#,W1:TׅE0D2iaԴ¸/5}znjnƯ<$UQj1OA8^ڟT(~PiزN8^zoO$Lti2v&B}i))Ud>:N`p)ymJR$^<#>U36!@w+hA]TR6G!RR_/k d^I3 Z)6\:ߥ `,s)>M5wgKߩfEDl*5}OCa.͉\s*5Zk:鄷( "[EƄ2V|Ҭ2%7҅$~N: O*Ge@w4[e6ܖKN A'"$=W|U7#"[ a5}.hJT_ "[E^6>\s*5ZOy^v+5uF)iR84O+C^Fqe?ء_p E)^킖iA̺BX0Tr+'cͼ"5}a@J). kXJdY]q9مR}U2DQ t2.b)^킆CitS/bbOI)IQ|RT4'l@}K+y]F&5}~*5ZKNrZJ: Y ?$͉tϚ3UQ`A+V|OyR@w2r#]$yO1^$8'lA mFe.h>:ObH[;5}8w_BۿCfQ7w;XOL) ONc.͉\s*5Zt+WyO6>nsƐ`(@Du5FRm14$tJQ&6rek85}N5u34*יAK_צ{ޘkT1g1&!8PT?D%K&8Ns|(c,yL5t-m@k=!9w+3%7忼rg)4R0CD2SPDCALC.REF+!` )S̐0lƀM0ni\ H5}(nBGA@@RN4lˆaSD2mb 2clQHnBHg伩62wz, :i޸92v֙S蚤Ky!?¡MNvkZŪ\5}P~M5/`D~I3g 4_БqE&SGW7˰aOϴ鴮z5VH@kw_(~zNG~y8Y1H.=-OK^ #fөW#_s5}d& dB R5SoB]wW_i W :eQ؅Nu07Ao?A!Gqf(HABuQIm%N(2V/amvp5}ewM8YQRXt5cS4EXA xcT_qTEu#Da @NZP "xlO%iAf!VS1c5}XTieyVGS